package com.gitee.feizns.quickstart.web.ex;

import lombok.Getter;

import java.util.Optional;

/**
 * 用于描述业务异常.
 * @author feizns
 * @since 2019/6/5
 */
public class ServiceException extends RuntimeException implements ErrorCode {

    /**
     * 业务错误码 如果为空将会仅仅作为消息传递
     */
    @Getter
    @SuppressWarnings("all")
    private Optional<ErrorCode> errorCode = Optional.empty();

    /**
     * 指定业务消息
     * @param message {@link RuntimeException#getMessage()}
     */
    public ServiceException(String message) {
        super(message);
    }

    /**
     * 指定业务消息
     * @see String#format(String, Object...)
     * @param format {@link RuntimeException#getMessage()}
     * @param args 参数
     */
    public ServiceException(String format, Object... args) {
        super(String.format(format, args));
    }

    /**
     * 指定业务异常码
     * @param errorCode {@link ErrorCode}
     */
    public ServiceException(ErrorCode errorCode) {
        this.errorCode = Optional.ofNullable(errorCode);
    }

    @Override
    public Integer getCode() {
        return errorCode.map(ErrorCode::getCode).orElse(null);
    }

    @Override
    public String getMsg() {
        return errorCode.map(ErrorCode::getMsg).orElse(super.getMessage());
    }

}
